SUMMARY:
1.  It sets the joker for the game so you can activate functions with buttons.
2.  It sets it's own personal space to restore the return address, and 3 extra spaces for cycling through the results and testing them and then finding the addresses.
3.  It sets where the results are stored, and how many can be stored.
4.  It sets where the scans will start, and where they will end.
5.  The rest is just button combinations to trigger the functions you want.  Almost every function starts with the same button combination that causes the function to not execute until you let go of the buttons you press, otherwise it would most likely execute the functions multiple times which would mess up all scans.  The only functions that don't have that safety thing are the ones to apply the values since you might want to constantly write the values to see if you found the correct result.


200fff2c 3c19JJJJ lui t9, $JJJJ               Sets where the joker address is.  The address is JJJJjjjj.
200fff30 3739jjjj ori t9, t9, $jjjj           Sets where the joker address is.  The address is JJJJjjjj.
200ffe34 3c18000f lui t8, $000f               Sets where the return address is stored (starts at address 000ffff0) and the currently selected result, the result's address, and the result's value.  This is the "000f" part of the address.
200ffe38 3718fff0 ori t8, t8, $fff0           Sets where the return address is stored (starts at address 000ffff0) and the currently selected result, the result's address, and the result's value.  This is the "fff0" part of the address.
200fff3c af1f000c sw ra, $000c(t8)            Stores register "ra" at address 000ffffc.
200fff40 3c0f000a lui t7, $000a               Sets where it starts storing results.  It's at address 000a0000.
200fff44 35ef0000 ori t7, t7, $0000           Sets where it starts storing results.  It's at address 000a0000.
200fff48 3c0e000e lui t6, $000e               Sets the address where it will stop scanning because it has enough results.  It's at address 000e0000.  000e0000 - 000a0000 = 00040000.  Each result is 4 bytes for the address, and 4 bytes for the value, equaling 8 bytes for each result.  00040000 / 8 = 8000 hex results, meaning it stores a maximum of 32768 results.
200fff4c 35ce0000 ori t6, t6, $0000           Sets the address where it will stop scanning because it has enough results.  It's at address 000e0000.  000e0000 - 000a0000 = 00040000.  Each result is 4 bytes for the address, and 4 bytes for the value, equaling 8 bytes for each result.  00040000 / 8 = 8000 hex results, meaning it stores a maximum of 32768 results.
200fff50 3c0d0010 lui t5, $0010               Sets which address (Address 00100000) it starts scanning for results at.
200fff54 35ad0000 ori t5, t5, $0000           Sets which address (Address 00100000) it starts scanning for results at.
200fff58 3c0c01ff lui t4, $01ff               Sets which address it will stop scanning at when it reaches it.  It stops scanning after address 01fffffc, where the PS2's RAM ends.
200fff5c 358cfffc ori t4, t4, $fffc           Sets which address it will stop scanning at when it reaches it.  It stops scanning after address 01fffffc, where the PS2's RAM ends.
200fff60 972a0000 lhu t2, $0000(t9)           Loads which buttons are pressed from the joker address JJJJjjjj.
200fff64 340bfeef ori t3, zero, $feef         Sets which buttons need to be pressed to activate the function "First Scan (1, 2, or 4 bytes)".
200fff68 114bffdf beq t2, t3, $000fff00       Goes to the function, "First Scan (1, 2, or 4 bytes)", if L2 + Up are pressed.

200fffe8 03e00008 jr ra